﻿package mortal.game.scene3D.map3D.AstarAnyDirection.processor
{
    import flash.geom.*;
    import mortal.game.*;
    import mortal.game.scene3D.map3D.AstarAnyDirection.data.*;

    public class MapGridToTargetPoint extends Object
    {

        public function MapGridToTargetPoint()
        {
            return;
        }// end function

        public static function work(param1:Array, param2:int, param3:int) : void
        {
            if (param1 == null || param1.length == 0)
            {
                return;
            }
            var _loc_4:* = param1[(param1.length - 1)];
            if (param1.length == 1)
            {
                _loc_4.x = param2;
                _loc_4.y = param3;
                return;
            }
            var _loc_5:* = param1[param1.length - 2];
            var _loc_6:* = new AstarTurnPoint();
            _loc_6._x = param2;
            _loc_6._y = param3;
            if (MapGridToPixels.lineWalkable(_loc_5, _loc_6))
            {
                _loc_4.x = param2;
                _loc_4.y = param3;
                return;
            }
            var _loc_7:* = new AstarTurnPoint();
            _loc_7._x = param2;
            _loc_7._y = param3;
            _loc_7.distance = _loc_4.distance;
            var _loc_8:* = new Point();
            var _loc_9:* = new Point(_loc_4._x, _loc_4._y);
            var _loc_10:* = new Point(_loc_5._x, _loc_5._y);
            var _loc_11:* = new Point();
            var _loc_12:* = new Point();
            _loc_11.x = _loc_4._x - 0.5 * Game.mapInfo.pieceWidth + 1;
            _loc_11.y = _loc_4._y - 0.5 * Game.mapInfo.pieceHeight + 1;
            _loc_12.x = _loc_4._x + 0.5 * Game.mapInfo.pieceWidth - 1;
            _loc_12.y = _loc_4._y - 0.5 * Game.mapInfo.pieceHeight + 1;
            if (GeomUtil.calcSegmentsCrossPoint(_loc_9, _loc_10, _loc_11, _loc_12, _loc_8, false))
            {
                _loc_4._x = _loc_8.x;
                _loc_4._y = _loc_8.y;
                param1.push(_loc_7);
                return;
            }
            _loc_11.x = _loc_4._x + 0.5 * Game.mapInfo.pieceWidth - 1;
            _loc_11.y = _loc_4._y + 0.5 * Game.mapInfo.pieceHeight - 1;
            if (GeomUtil.calcSegmentsCrossPoint(_loc_9, _loc_10, _loc_11, _loc_12, _loc_8, false))
            {
                _loc_4._x = _loc_8.x;
                _loc_4._y = _loc_8.y;
                param1.push(_loc_7);
                return;
            }
            _loc_12.x = _loc_4._x - 0.5 * Game.mapInfo.pieceWidth + 1;
            _loc_12.y = _loc_4._y + 0.5 * Game.mapInfo.pieceHeight - 1;
            if (GeomUtil.calcSegmentsCrossPoint(_loc_9, _loc_10, _loc_11, _loc_12, _loc_8, false))
            {
                _loc_4._x = _loc_8.x;
                _loc_4._y = _loc_8.y;
                param1.push(_loc_7);
                return;
            }
            _loc_11.x = _loc_4._x - 0.5 * Game.mapInfo.pieceWidth + 1;
            _loc_11.y = _loc_4._y - 0.5 * Game.mapInfo.pieceHeight + 1;
            if (GeomUtil.calcSegmentsCrossPoint(_loc_9, _loc_10, _loc_11, _loc_12, _loc_8, false))
            {
                _loc_4._x = _loc_8.x;
                _loc_4._y = _loc_8.y;
                param1.push(_loc_7);
                return;
            }
            return;
        }// end function

    }
}
